package com.ybxy;

/**
 * @ProjectName: ybxy6
 * @Titile: TestLambda
 * @Author: zqsfg
 * @Description: TODO
 */
import static com.ybxy.TestLambda.testA;

public class TestLambda {
    public static void main(String[] args) {
//        testA();
//        testB();
//        testC();
        testD();
    }
    public static void testD(){
        //1.创建C接口的匿名内部类对象
        D d1=new D() {
            @Override
            public int max(int a, int b) {
                return Math.max(a, b);
            }
        };
        //2.将匿名内部类对象改成Lambda表达式
        D d2=(a,b)->a>b?a:b;
        //方法引用
//    D d3=(a,b)-> Math.max(a, b);
        D d3= Math::max;
        int max = d3.max(111, 251);
        System.out.println(max);

    }


    public static  void testC(){
        //1.创建C接口的匿名内部类对象
        C c= new C(){
            @Override
            public String show(String name){
                return"name="+name;
            }
        };
        //2.将匿名内部类对象改成Lambda表达式
//        C c2= new C(){
//            @Override
//            public String show(String name){
//                return name;
//            }
//        };
        C c2= name -> "name="+name;
        //3.创建C接口的方法引用对象
        C c3= TestLambda::show4;
        String r=c3.show("zq");
        System.out.println(r);

    }
    public static  String show4(String name){
       return  "name"+name;
    }
    public static  void testB(){
        //1.创建B接口的匿名内部类对象
        B b= new B(){
            @Override
            public void show(String name){
                System.out.println(name);
            }
        };
        //创建B接口的Lambda表达式
        B b2= name -> System.out.println(name);
        //创建B接口的方法引用对象
        B b3= System.out::println;
        b3.show("lsq");


    }
    public static  void testA(){
        //1.创建A接口的匿名内部类对象
        A a1= new A(){
            @Override
            public  void  show(String name,int age){
                System.out.println(name+":"+age);
            }
        };
        //2.将匿名内部类对象改成Lambda表达式
        A a2= (name,age)-> System.out.println(name+":"+age);
        a2.show("zx",18);
        //3.使用方法引用替换Lambda表达式（静态方法引用）
        A a3=TestLambda::show2;
        a3.show("yyq",25);
        //3.使用方法引用替换Lambda表达式（成员方法）
        //(1)
        TestLambda testLambda=new TestLambda();
        A a5=TestLambda::show3;
        a5.show("sss",30);
        //(2)
        A a4=TestLambda::show3;
        a4.show("lll",29);
    }
    //定义一个成员方法，故意让返回值和形参和A接口中的方法一致
    public static void show2(String name,int age){
        System.out.println("show2:"+name+":"+age);
    }
    public static void show3(String name,int age){
        System.out.println("show3:"+name+":"+age);
    }


}
